package com.bdqn.zhang.pojo;

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import org.hibernate.annotations.*;
import org.hibernate.annotations.CascadeType;

import javax.persistence.*;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.HashSet;
import java.util.Set;

/**
 * <Description> <br>
 *
 * @author tao<br>
 * @version 1.0<br>
 * @taskId: <br>
 * @createDate 2019/10/17 17:50 <br>
 * @see com.bdqn.zhang.pojo <br>
 */
@Entity //实体
@Table(name="usertb") //表名
@Data
public class User {
    @Id //指定主键
    @GeneratedValue(strategy = GenerationType.IDENTITY) //自动增长列 //设定主键生成策略
    private Long userId;//用户唯一标识userId
    private String userName;//用户姓名
    private String userSex;//用户性别
    @JsonIgnore
    @ManyToMany(fetch = FetchType.EAGER) //指定多对多关系
    //默认懒加载,只有调用getter方法时才加载数据
    @Cascade(value = {CascadeType.SAVE_UPDATE}) //设置级联关系
    @JoinTable(name = "user_role_tb", //指定第三张中间表名称
            joinColumns = {@JoinColumn(name = "user_role_tb_user_id")}, //本表主键userId与第三张中间表user_role_tb的外键user_role_tb_user_id对应
                    inverseJoinColumns={@JoinColumn(name = "user_role_tb_role_id")})
    //多对多关系另一张表与第三张中间表表的外键的对应关系
    @NotFound(action = NotFoundAction.IGNORE) //NotFound : 意思是找不到引用的外键数据时忽略，NotFound默认是exception
    private Set<Role> roleSet = new HashSet<Role>();//用户所拥有的角色集合
}
